package ia.programas.controlpc;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenu;

/**
 * Interfaz del control
 * 
 * @author Armando Andini
 *
 */
public class VentanaPrincipal {

	public JFrame fControlPC;
	public JTextField tRotar;
	public JTextField tAvanzar;
	public JTextField tVelAvance;
	public JTextField tVelRotacion;
	public ControlPC control;
	public JButton bConectar;
	public JButton bDesconectar;
	public JButton bRotar;
	public JButton bAvanzar;
	public JButton bCambiarAvance;
	public JButton bCambiarRotacion;
	public JButton bDisparar;
	public JTextArea tConsola;
	public JLabel lEstado;
	public JLabel lVelAvance;
	public JLabel lVelRotacion;
	public JMenuItem mnSalir;
	public JMenuItem mnMapa;
	
	private int logNum = 0;
	private JLabel lblPuerto;
	private JLabel lblPuerto_1;
	private JLabel lblPuerto_2;
	private JLabel lblPuerto_3;
	
	/**
	 * Create the application.
	 */
	public VentanaPrincipal(ControlPC control) {
		this.control = control;
		initialize();
		setearBotones();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		fControlPC = new JFrame();
		fControlPC.setTitle("Control PC");
		fControlPC.setBounds(100, 100, 950, 340);
		fControlPC.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fControlPC.getContentPane().setLayout(null);
		
		JPanel pConexion = new JPanel();
		pConexion.setBorder(new LineBorder(new Color(0, 0, 0)));
		pConexion.setBounds(10, 254, 396, 29);
		fControlPC.getContentPane().add(pConexion);
		pConexion.setLayout(null);
		
		bConectar = new JButton("Conectar");
		bConectar.setBounds(3, 2, 89, 23);
		pConexion.add(bConectar);
		
		bDesconectar = new JButton("Desconectar");
		bDesconectar.setBounds(102, 2, 100, 23);
		pConexion.add(bDesconectar);
		
		JLabel lblEstado = new JLabel("Estado:");
		lblEstado.setForeground(Color.BLACK);
		lblEstado.setBounds(212, 6, 46, 14);
		pConexion.add(lblEstado);
		
		lEstado = new JLabel("DESCONECTADO");
		lEstado.setForeground(Color.BLUE);
		lEstado.setFont(new Font("Tahoma", Font.BOLD, 12));
		lEstado.setBounds(268, 5, 118, 14);
		pConexion.add(lEstado);
		
		JPanel pPiloto = new JPanel();
		pPiloto.setBorder(new LineBorder(new Color(0, 0, 0)));
		pPiloto.setBounds(10, 11, 144, 218);
		fControlPC.getContentPane().add(pPiloto);
		pPiloto.setLayout(null);
		
		JLabel lblPiloto = new JLabel("Piloto");
		lblPiloto.setBounds(60, 6, 26, 14);
		pPiloto.add(lblPiloto);
		
		bRotar = new JButton("Rotar");
		bRotar.setBounds(10, 32, 72, 23);
		pPiloto.add(bRotar);
		
		tRotar = new JTextField();
		tRotar.setHorizontalAlignment(SwingConstants.CENTER);
		tRotar.setText("90");
		tRotar.setBounds(93, 32, 41, 22);
		pPiloto.add(tRotar);
		tRotar.setColumns(10);
		
		bAvanzar = new JButton("Avanzar");
		bAvanzar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		bAvanzar.setBounds(10, 66, 72, 23);
		pPiloto.add(bAvanzar);
		
		tAvanzar = new JTextField();
		tAvanzar.setHorizontalAlignment(SwingConstants.CENTER);
		tAvanzar.setText("90");
		tAvanzar.setColumns(10);
		tAvanzar.setBounds(93, 65, 41, 22);
		pPiloto.add(tAvanzar);
		
		bCambiarAvance = new JButton("Cambiar");
		bCambiarAvance.setBounds(10, 126, 72, 23);
		pPiloto.add(bCambiarAvance);
		
		tVelAvance = new JTextField();
		tVelAvance.setHorizontalAlignment(SwingConstants.CENTER);
		tVelAvance.setText("90");
		tVelAvance.setColumns(10);
		tVelAvance.setBounds(93, 126, 41, 22);
		pPiloto.add(tVelAvance);
		
		JLabel lblVelAvance = new JLabel("Vel. avance:");
		lblVelAvance.setBounds(11, 108, 60, 14);
		pPiloto.add(lblVelAvance);
		
		lVelAvance = new JLabel("VEL");
		lVelAvance.setForeground(Color.BLUE);
		lVelAvance.setBounds(88, 108, 46, 14);
		pPiloto.add(lVelAvance);
		
		bCambiarRotacion = new JButton("Cambiar");
		bCambiarRotacion.setBounds(10, 184, 72, 23);
		pPiloto.add(bCambiarRotacion);
		
		tVelRotacion = new JTextField();
		tVelRotacion.setHorizontalAlignment(SwingConstants.CENTER);
		tVelRotacion.setText("90");
		tVelRotacion.setColumns(10);
		tVelRotacion.setBounds(93, 184, 41, 22);
		pPiloto.add(tVelRotacion);
		
		JLabel lblVelRotacion = new JLabel("Vel. rotacion:");
		lblVelRotacion.setBounds(11, 166, 75, 14);
		pPiloto.add(lblVelRotacion);
		
		lVelRotacion = new JLabel("VEL");
		lVelRotacion.setForeground(Color.BLUE);
		lVelRotacion.setBounds(88, 166, 46, 14);
		pPiloto.add(lVelRotacion);
		
		JPanel pSensores = new JPanel();
		pSensores.setBorder(new LineBorder(new Color(0, 0, 0)));
		pSensores.setBounds(164, 11, 242, 218);
		fControlPC.getContentPane().add(pSensores);
		pSensores.setLayout(null);
		
		JLabel lblSensores = new JLabel("Sensores");
		lblSensores.setBounds(103, 3, 44, 14);
		pSensores.add(lblSensores);
		
		lblPuerto = new JLabel("PUERTO 1");
		lblPuerto.setBounds(10, 59, 60, 14);
		pSensores.add(lblPuerto);
		
		lblPuerto_1 = new JLabel("PUERTO 2");
		lblPuerto_1.setBounds(10, 99, 60, 14);
		pSensores.add(lblPuerto_1);
		
		lblPuerto_2 = new JLabel("PUERTO 3");
		lblPuerto_2.setBounds(10, 136, 60, 14);
		pSensores.add(lblPuerto_2);
		
		lblPuerto_3 = new JLabel("PUERTO 4");
		lblPuerto_3.setBounds(10, 171, 60, 14);
		pSensores.add(lblPuerto_3);
		
		JComboBox comboPuerto1 = new JComboBox();
		comboPuerto1.setModel(new DefaultComboBoxModel(new String[] {"Seleccionar", "Color", "Ultrasonico", "Infrarrojo", "Tacto"}));
		comboPuerto1.setBounds(80, 56, 86, 23);
		pSensores.add(comboPuerto1);
		
		JComboBox comboPuerto2 = new JComboBox();
		comboPuerto2.setModel(new DefaultComboBoxModel(new String[] {"Seleccionar", "Color", "Ultrasonico", "Infrarrojo", "Tacto"}));
		comboPuerto2.setBounds(80, 96, 86, 23);
		pSensores.add(comboPuerto2);
		
		JComboBox comboPuerto3 = new JComboBox();
		comboPuerto3.setModel(new DefaultComboBoxModel(new String[] {"Seleccionar", "Color", "Ultrasonico", "Infrarrojo", "Tacto"}));
		comboPuerto3.setBounds(80, 133, 86, 23);
		pSensores.add(comboPuerto3);
		
		JComboBox comboPuerto4 = new JComboBox();
		comboPuerto4.setModel(new DefaultComboBoxModel(new String[] {"Seleccionar", "Color", "Ultrasonico", "Infrarrojo", "Tacto"}));
		comboPuerto4.setBounds(80, 168, 86, 23);
		pSensores.add(comboPuerto4);
		
		JLabel lPuerto1 = new JLabel("VALOR");
		lPuerto1.setForeground(Color.BLUE);
		lPuerto1.setHorizontalAlignment(SwingConstants.CENTER);
		lPuerto1.setBounds(176, 59, 56, 14);
		pSensores.add(lPuerto1);
		
		JLabel lPuerto2 = new JLabel("VALOR");
		lPuerto2.setHorizontalAlignment(SwingConstants.CENTER);
		lPuerto2.setForeground(Color.BLUE);
		lPuerto2.setBounds(176, 99, 56, 14);
		pSensores.add(lPuerto2);
		
		JLabel lPuerto3 = new JLabel("VALOR");
		lPuerto3.setHorizontalAlignment(SwingConstants.CENTER);
		lPuerto3.setForeground(Color.BLUE);
		lPuerto3.setBounds(176, 136, 56, 14);
		pSensores.add(lPuerto3);
		
		JLabel lPuerto4 = new JLabel("VALOR");
		lPuerto4.setHorizontalAlignment(SwingConstants.CENTER);
		lPuerto4.setForeground(Color.BLUE);
		lPuerto4.setBounds(176, 171, 56, 14);
		pSensores.add(lPuerto4);
		
		tConsola = new JTextArea();
		JScrollPane sp = new JScrollPane(tConsola);
		sp.setBounds(414, 11, 518, 272);
		fControlPC.getContentPane().add(sp);
		
		bDisparar = new JButton("");
		bDisparar.setBounds(387, 235, 22, 12);
		fControlPC.getContentPane().add(bDisparar);
		
		JMenuBar menuBar = new JMenuBar();
		fControlPC.setJMenuBar(menuBar);
		
		JMenu mnNewMenu = new JMenu("Menu");
		menuBar.add(mnNewMenu);
		
		mnMapa = new JMenuItem("Mapa");
		mnNewMenu.add(mnMapa);
		
		
		mnSalir = new JMenuItem("Salir");
		mnNewMenu.add(mnSalir);
	}
	
	private void setearBotones(){
		ActionListener bConectarAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.conectar();
		      }
		    };
		bConectar.addActionListener(bConectarAccion);
		
		ActionListener bDesconectarAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.desconectar();
		      }
		    };
		bDesconectar.addActionListener(bDesconectarAccion);
		
		
		ActionListener bAvanzarAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.avanzar(Float.parseFloat(tAvanzar.getText()));
		      }
		    };
		bAvanzar.addActionListener(bAvanzarAccion);
		
		
		ActionListener bRotarAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.rotar(Float.parseFloat(tRotar.getText()));
		      }
		    };
		bRotar.addActionListener(bRotarAccion);
		
		
		ActionListener bCambiarAvanceAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.cambiarAvance(Float.parseFloat(tVelAvance.getText()));
		      }
		    };
		bCambiarAvance.addActionListener(bCambiarAvanceAccion);
		

		ActionListener bCambiarRotacionAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.cambiarRotacion(Float.parseFloat(tVelRotacion.getText()));
		      }
		    };
		bCambiarRotacion.addActionListener(bCambiarRotacionAccion);
		
		
		ActionListener bDispararAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.disparar();
		      }
		    };
		bDisparar.addActionListener(bDispararAccion);
		
		ActionListener mnMapaAccion = new ActionListener() {
		      public void actionPerformed(ActionEvent actionEvent) {
		    	  control.abrirVentanaMapa();
		      }
		    };
		mnMapa.addActionListener(mnMapaAccion);
	}

	public void log(String arg) {
		tConsola.append("["+logNum+"]"+arg + "\n");
		logNum++;
	}
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}
}
